Package com.python.pydev.refactoring.hyperlink

Source Code of com.python.pydev.refactoring.hyperlink.PythonElementHyperlinkDetector

/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.python.pydev.refactoring.hyperlink;

import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.ui.texteditor.ITextEditor;
import org.python.pydev.core.log.Log;
import org.python.pydev.editor.PyEdit;
import org.python.pydev.parser.visitors.PythonLanguageUtils;


/**
* Based on JavaElementHyperlinkDetector (which uses the hyperlink mechanism added at eclipse 3.3)
*
* @author Fabio
*/
public class PythonElementHyperlinkDetector extends AbstractHyperlinkDetector {

    /**
     * Will basically hyperlink any non keyword word (and let the PythonHyperlink work later on to open it if that's possible)
     */
    public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
        ITextEditor textEditor = (ITextEditor) getAdapter(ITextEditor.class);
        if (region == null || !(textEditor instanceof PyEdit)) {
            return null;
        }

        PyEdit editor = (PyEdit) textEditor;

        int offset = region.getOffset();

        try {
            IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());

            //see if we can find a word there
            IRegion wordRegion = PythonWordFinder.findWord(document, offset);
            if (wordRegion == null) {
                return null;
            }

            //don't highlight keywords
            try {
                IDocument doc = editor.getDocument();
                String selectedWord = doc.get(wordRegion.getOffset(), wordRegion.getLength());
                if (PythonLanguageUtils.isKeyword(selectedWord)) {
                    return null;
                }
            } catch (BadLocationException e) {
                Log.log(e);
            }

            //return a hyperlink even without trying to find the definition (which may be costly)
            return new IHyperlink[] { new PythonHyperlink(wordRegion, editor) };
        } catch (Exception e) {
            Log.log(e);
            return null;
        }

    }

}
TOP

Related Classes of com.python.pydev.refactoring.hyperlink.PythonElementHyperlinkDetector

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.